package main

import (
	"fmt"
	"strconv"
	"strings"
)

func strconvTest(){
	string1 := "hello"
	fmt.Println("string1 : ",len(string1))

	//遍历字符串
	string2 := "hello 中国"
	//遍历含有中文的字符串，需要先转换成为切片
	r := []rune(string2)	
	for i := 0;i<len(r);i++{
		fmt.Printf("%c\t",r[i])
	}
	fmt.Println("")

	//字符串转整数
	//等价于strconv.ParseInt(s,10,0) 0表示根据系统架构自动确定整数大小
	num,err := strconv.Atoi("123")
	if(err!=nil){
		fmt.Println("转换失败",err)
	} else {
		fmt.Printf("转换成功 %v %T\n",num,num)
	}

	//等价于FormatInt(int64(i), 10)
	string3 := strconv.Itoa(123)
	fmt.Printf("转换成功 %q %T\n",string3,string3)

	//string转byte
	var bytes = []byte("hello")
	fmt.Printf("bytes = %c\t",bytes)
	fmt.Println("")

	//byte转string
	string4 := string(bytes)
	fmt.Printf("string4 = %q %T",string4,string4)
}

func stringsTest(){
	//包含子串
	string1 := "hello world"
	isTrue := strings.Contains(string1,"wor")
	fmt.Println(isTrue)

	//子串出现的次数
	num := strings.Count(string1,"l")
	fmt.Println("num = ",num)

	//字符串比较
	string2 := "Hello World"
	isTrue2 := string1==string2	//区分字母大小写
	isTrue3 := strings.EqualFold(string1,string2)	//不区分字母大小写
	fmt.Println(isTrue2," ",isTrue3)

	//子串替换
	string3 := "go go go"
	//最后一个参数为1代表只替换第一个匹配的子串，为-1代表替换匹配的所有子串
	string4 := strings.Replace(string3,"go","go语言",-1)	
	fmt.Println("替换后的string = ",string4)

	//去掉左右两边的空格
	string5 := strings.TrimSpace("  hello world  ")
	fmt.Printf("%q\n",string5)

	//去掉左右两边指定的子串
	string6 := strings.Trim(" !hello ! "," !")
	fmt.Printf("%q\n",string6)
	//TrimLeft和TrimRight同理

	//判断是否以某个字符串开头或结尾使用HasPrefix和HasSuffix
}

func main(){
	strconvTest()
	stringsTest()
}